package cn.itcast.bos.utils;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

public class MailUtils {
	private static String smtp_host = "smtp.qq.com"; // smtp
	private static String username = "luvens@qq.com"; // 邮箱账户
	private static String password = "gvdseuclgztlbgij"; // 邮箱授权码

	private static String from = "luvens@qq.com"; // 使用当前账户
	public static String activeUrl = "http://localhost:8088/signup_activeMail.action";
//	public static String activeUrl = "http://192.168.184.128:8086/bos_fore/signup_activeMail.action";

	public static void sendMail(String subject, String content, String to) {
		// 创建邮件的发送过程中用到的主机和端口号的属性文件
		Properties props = new Properties();
		props.setProperty("mail.smtp.host", smtp_host);
		props.setProperty("mail.transport.protocol", "smtp");
		// 设置邮件发送需要认证
		props.setProperty("mail.smtp.auth", "true");
		// 设置发送邮件端口号
		props.setProperty("mail.smtp.port", "465");

		// 如果使用Gmail/QQ邮箱 需要配置下面属性
		// 如果设置,指定实现javax.net.SocketFactory接口的类的名称,这个类将被用于创建SMTP的套接字。
		props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		// 如果设置为true,未能创建一个套接字使用指定的套接字工厂类将导致使用java.net.Socket创建的套接字类。默认值为true。
		// props.setProperty("mail.smtp.socketFactory.fallback", "false");
		// 指定的端口连接到在使用指定的套接字工厂。如果没有设置,将使用默认端口。
		// props.setProperty("mail.smtp.socketFactory.port", "465");

		// 根据邮件会话 构建一个邮件的session
		Session session = Session.getInstance(props);
		// 创建一个邮件消息
		Message message = new MimeMessage(session);
		try {
			// 创建邮件发送者地址，并将发送者的地址设置到消息的信息中
			message.setFrom(new InternetAddress(from));
			// 创建邮件的接收者地址，并将接收者的地址设置到消息的信息中
			message.setRecipient(RecipientType.TO, new InternetAddress(to));
			// 设置邮件的主题
			message.setSubject(subject);
			// 设置邮件的发送内容
			message.setContent(content, "text/html;charset=utf-8");
			// 创建Transport,设置连接参数
			Transport transport = session.getTransport();
			transport.connect(smtp_host, username, password);
			// 发送邮件
			transport.sendMessage(message, message.getAllRecipients());
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException("邮件发送失败...");
		}
	}

	public static void main(String[] args) {
		sendMail("测试邮件", "你好，传智播客", "luvensg@gmail.com");
	}
}
